Zenpyを使いはじめました | python, Zendesk

Zenpyを使いはじめました | python, Zendesk

Clock Icon2018.08.13

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ベルリンは涼しいです。はんせです。

はじめに

これまでZendeskをpythonでいじるときはCore APIrequestsでそのままエンドポイントを叩いていました。が、Zenpyなるものによって、よりシンプルにコードが書けることを今更知りました。

内容

Zenpyのインストールと基本APIの実行方法についてご紹介します。

  • Zenpyのインストール
  • credentialとオブジェクト作成
  • チケット検索をする
  • チケットの各種情報(キー)を取り出してみる
  • ユーザー情報も取り出してみる
  • チケットを更新する

インストール

pip install zenpy

Zenpyはpython2、python3両方をサポートしてます。

クレデンシャルとオブジェクト作成

クレデンシャルを用意します

cred = {
   "token": "zendesknotoken",
   "email": "hanse.kohei@classmethod.jp",
   "subdomain": "zendesknosubdomain"
}
  • tokenにはZendesk APIキーを記載します
  • emailにはZendesk APIキーを発行したZendeskユーザーのemailアドレスを記載します
  • subdomainにはZendeskのサブドメインを記載します(xxx.zendesk.comのxxxの部分)

zenpy_clientオブジェクトを作成します

% python
Python 3.6.2 (default, Jan  9 2018, 15:22:48) 
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.39.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from zenpy import Zenpy
>>> creds = {
...    "token": "zendesknotoken",
...    "email": "hanse.kohei@classmethod.jp",
...    "subdomain": "zendesknosubdomain"
... }
>>> zenpy_client = Zenpy(**creds)
>>> 

できました

チケット検索をする

Search APIをZenpyで試します。サーチクエリの詳細はココにあります。

datetimeを使って、1週間前までに作成されたものを検索してみます。
forで回してprintをするなどで、検索結果をチェックします。
sandbox環境で実行してみます。

>>> zenpy_client = Zenpy(**creds)
>>> two_weeks_ago = datetime.datetime.now() - datetime.timedelta(days=14)
>>> import datetime
>>> two_weeks_ago = datetime.datetime.now() - datetime.timedelta(days=14)
>>> today = datetime.datetime.now()
>>> for ticket in zenpy_client.search("test", created_between=[two_weeks_ago, today], type='ticket'):
...    print(ticket)
... 
Ticket(id=947)
Ticket(id=949)

Zendeskチケット #947#949が検索に引っかかりました。

蛇足ですが、これは以下のAPIリクエストと同じ結果です。

% curl 'https://zendesknosubdomain.zendesk.com/api/v2/search.json' -G --data-urlencode 'query=test created<2018-08-12 created>2018-07-30 type:ticket' -u 'hanse.kohei@classmethod.jp/token:zendesknotoken'| jq -r ".results[] | .id"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  6533  100  6533    0     0   7055      0 --:--:-- --:--:-- --:--:--  7055
947
949

チケットの各種情報(キー)を取り出してみる

SandboxのZendeskチケットID#947に対してチケット情報を取得してみます。

>>> zenpy_client = Zenpy(**creds)
>>> ticket = zenpy_client.tickets(id=947)

これで入りました。順にチケットID, チケットurl, チケット作成時刻を取得してみます。

>>> ticket.id
947
>>> ticket.url
'https://zendesknosubdomain.zendesk.com/api/v2/tickets/947.json'
>>> ticket.created_at
'2018-08-05T13:11:31Z'

取得できるチケットのキーはこちらをご参考

これまた蛇足ですが、前項のSearchの出力結果と組み合わせてみます

>>> for ticket in zenpy_client.search("test", created_between=[two_weeks_ago, today], type='ticket'):
...     print(ticket.url)
https://zendesknosubdomain.zendesk.com/api/v2/tickets/947.json
https://zendesknosubdomain.zendesk.com/api/v2/tickets/949.json

シンプルです。

ユーザー情報も取り出してみる

同じ要領でユーザーも取り出してみます

>>> zenpy_client.users(id=25252472687)
User(id=25252472687)
>>> user = zenpy_client.users(id=25252472687)
>>> user.id
25252472687
>>> user.name
'hanse-berlin'
>>> user.email
'koheihansetest@gmail.com'

簡単ですね。

チケットを更新する

最後にチケット更新を試します。社内メモを付与してみます。
Zenpyの既定ライブラリからapi用のオブジェクトジェネレーター(?)クラスをインポートする必要があります。
このような形です。

>>> from zenpy.lib.api_objects import Comment
>>> body = 'test hanse ahaha'
>>> comment = Comment(body=body, public=False)
>>> print(comment.body)
test hanse ahaha

commentオブジェクトのbodyに「test hanse ahaha」が入りました。 今はチケットに社内メモを追加する(プライベートコメントの追加をする)のみですので、Commentを使用しますが、ユーザーやグループ情報の更新などには、ほかのクラスを使用します。詳細はこちら

Zendeskチケット#947に社内メモ追加のアップデートを実行してみます。

>>> from zenpy.lib.api_objects import Comment
>>> ticket = zenpy_client.tickets(id=947)
>>> body = 'test hanse ahaha'
>>> ticket.comment = Comment(body=body, public=False)
>>> zenpy_client.tickets.update(ticket)
TicketAudit()

実際にはチケットオブジェクトのキーticket.commentbodyを追加し(社内メモなのでpublicFalseとします)、アップデートを実行するという流れになります。

社内メモが追加されました。

以上です

zenpyの基本的な操作をご紹介しました。

ではまた〜。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.